<?php
namespace app\common\controller;

use \app\common\controller\Base;
use \think\Config;
use \think\Loader;
use \think\Request;
use \think\Session;

/**
 *
 */
class Homebase extends Base
{

    public $user   = null;
    public $userId = 0;

    public function __construct()
    {

        parent::__construct();
        $this->initializeCheck();
        $this->checkAuth();
    }

    /**
     * @name 初始化加载
     * @在构造函数中验证
     */
    protected function initializeCheck()
    {
        $user   = Loader::model('user');
        $userId = intval(session('u_id'));
        if ($userId) {
            $user_info = $user->getUserByUserId($userId);
            if ($user_info) {
                if ($user_info->status !== 1) {
                } else if ($user_info->is_del === 1) {
                } else {
                    $this->userId = $user_info->user_id;
                    $this->user   = $user_info;
                }
            }
        }
    }

    /**
     * @return \think\response\Json
     * @name 用户验证
     * @如果用户存在将返回用户对象，不存在则会跳转（强制验证）
     */
    protected function check()
    {
        if ($this->user == null || !$this->userId) {
            return "\"<script>top.location.href=\"/admin/login.html\"</script>\"";
            die;
        }
        return $this->user;
    }

    /**
     * @name 权限验证 （强制验证）
     */
    protected function checkAuth()
    {
        //  判断该地址是否在权限验证过滤地址中
        $user       = $this->check();
        $filter_uri = Config::get('auth.filter_uri');
        if (in_array($this->now_url, $filter_uri)) {
            return $user;
        }
        //  判断该用户是否为超管权限
        $admin_auth_id = Config::get('auth.admin_auth_id');
        if (isset($user->user_id)) {
            if ($user->user_id == $admin_auth_id) {
                return $user;
            }
        }
        //  判断该用户是否存在权限过滤用户中
        $filter_u_id = Config::get('auth.filter_u_id');
        if (isset($user->user_id)) {
            if (in_array($user->user_id, $filter_u_id)) {
                return $user;
            }
        }

        //  先判断菜单地址中该权限是否需要权限验证
        $menuMgr = Loader::model('Menu');
        // var_dump(Request::instance()->path());
        $menu = $menuMgr->where('rule_value', $this->now_uri)->find();
        // var_dump($menu);
        // die();
        //  没有找到该地址默认为不验证权限
        if (!$menu) {
            return $user;
        }
        // var_dump($menu['data']);
        // 判断是否有参数需要判断，如果没有的话则直接验证rule_value 有的话传递需要验证的参数进行验证
        $data = '';
        if ($menu['data']) {
            $param = explode('/', $menu['data']);
            foreach ($param as $key => $value) {
                if ($key % 2 == 0) {
                    if ($data) {
                        $data .= '/' . $value . '/' . input($value);
                    } else {
                        $data .= $value . '/' . input($value);
                    }

                }
            }
        }
        // var_dump($data);
        //  1认证+菜单 0只菜单
        if ($menu['type'] == 0) {
            return $user;
        }
        //  查询该地址是否存在权限记录中
        $authRecord = $user->getAuthRecordOneByRulValue($this->now_uri, $data);
        if (!$authRecord) {
            die('权限不存在' . Request::instance()->path());
            $this->redirect(url('home/Login/index'), ['ref' => 1]);
            die;
        }
        return $user;
    }

}
